package com.dongzili.sp_mongodb.utils;

import org.springframework.data.mongodb.core.query.Criteria;
import java.util.List;
import java.util.Map;

public class CriteriaBuilder {

    public static Criteria buildCriteria(Map<String, Object> queryMap) {
        Criteria criteria = new Criteria();
        
        queryMap.forEach((field, value) -> {
            // 如果值是一个Map，意味着是一个复杂查询
            if (value instanceof Map<?, ?>) {
                Map<String, Object> conditions = (Map<String, Object>) value;
                conditions.forEach((operation, operationValue) -> handleOperation(criteria, field, operation, operationValue));
            }
            // 可以添加对简单等值查询的支持
            else {
                criteria.and(field).is(value);
            }
        });

        return criteria;
    }

    private static void handleOperation(Criteria criteria, String field, String operation, Object value) {
        switch (operation) {
            case "$gte":
                criteria.and(field).gte(value);
                break;
            case "$lte":
                criteria.and(field).lte(value);
                break;
            case "$ne":
                criteria.and(field).ne(value);
                break;
            case "$in":
                criteria.and(field).in((List<?>) value);
                break;
            // 这里可以继续添加更多的操作符支持...
            default:
                break;
        }
    }

    // 示例用法
    public static void main(String[] args) {
        // 构建查询条件
        Map<String, Object> queryMap = Map.of(
            "age", Map.of("$gte", 18, "$lte", 30),
            "status", "active"
        );

        // 构建Criteria
        Criteria criteria = buildCriteria(queryMap);
        System.out.println(criteria.getCriteriaObject().toJson());
        
        // 在实际应用中，这个criteria对象可以进一步用于构建Query和执行数据库查询
    }
}